package com.study.thread.interrupt;

/*
    t1.interrupt(); // 表示中断t1线程，此时不是真正中断不知醒了，只是给他一个标示设置为true，需要线程里用Thread.currentThread().isInterrupted()判断是否中断

    Thread.currentThread().isInterrupted() //获取当前线程中断标志，如果已经中断（也就是别人调用了这个线程的intrrupt()方法）返回true，如果没中断是可以运行的返回false
    //且里面调用的，isInterrupted(false); false参数表示不清除中断标志

    Thread.interrupted(); //获取当前线程是否中断（注1），如果中断了（注2）则返回true，如果没有中断返回false，但是里面调用了（注3），会清除锁标志，也就是说如果是true，则清除为false线程复位
        //1、只获得当前线程，也就是只有在当前线程内部调用获取的是当前线程的
        //2、也就是别人调用了这个线程的intrrupt()方法
        //3、currentThread().isInterrupted(true); //isInterrupted(true); 清除线程标志，也就是设置为false
 */
public class InterruptDemo3 {

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            //判断当前线程是否被中断如果是返回true，如果不是则返回false
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    System.out.println("执行interrupt11111，当前中断标示：" + Thread.currentThread().isInterrupted());
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("异常中断interrupt，当前中断标示：" + Thread.currentThread().isInterrupted());
                }
            }
            System.out.println("执行interrupt结束2222，当前中断参数：" + Thread.currentThread().isInterrupted());

            Thread.interrupted(); //线程复位，检测当前线程是否被中断，如果是返回 true否则返回false，如果发现当前线程已经被中断，则清除中断
            while (!Thread.currentThread().isInterrupted()) {
                try {
                    System.out.println("执行interrupt333333，当前中断标示：" + Thread.currentThread().isInterrupted());
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("异常中断interrupt，当前中断标示：" + Thread.currentThread().isInterrupted());
                }
            }
        });
        t1.start();
        System.out.println("执行标记00000000");
        Thread.sleep(2000);
        t1.interrupt();//将当前线程设置为中断状态
        Thread.sleep(3000);
        t1.interrupt();//将当前线程设置为中断状态
    }
}
